home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / qbsub10.arc / PARSE.SUB < prev    next >
Text File  |  1986-06-24  |  3KB  |  73 lines

  1. ' PARSE.ASC -- MSDOS QuickBASIC subroutine parses COMMAND$    25 June 86
  2. '        by David L. Poskie     (608) 274-9560
  3. '                  7118 Raymond Rd. Madison, WI 53719
  4. ' Please run any suggestions, corrections, additions, or changes by me.
  5. ' I can be messaged on all the major Madison, WI RBBS's.
  6.  
  7. '|  >>> OMNI.SUB and PARSE.SUB must be $Included in main program.
  8. '|  DIMensioning MUST be done in the main program; e.g.:
  9. '|              NumMax = 2 : DIM Cmd$(NumMax)
  10. '|   This would allow 2 commands (we ignore Cmd$(0) here). 
  11. '|
  12. '|  Function: Parse the command line tail, getting as many commands as exist
  13. '|            (up to the maximum set by the Cmd$(NumMax) dimension statement
  14. '|            in the main program).
  15. '|            Requires commands be separated by one or more
  16. '|            definable characters, (I use spaces here). 
  17. '|  Input: NumMax = maximum number of commands this subroutine will parse
  18. '|         COMMAND$ = DOS command line function
  19. '|  Output: Num = the number of commands parsed.
  20. '|          Cmd$(1) to Cmd$(NumMax) = the separated command strings.
  21. '|  Other Vars: Text$ = internal work string
  22. '|              IsSep = flags the presence of a separator in Text$
  23. '|              Sep$ = one or more legal separators
  24.  
  25. Parse:
  26.     ' We'll work with Text$ because COMMAND$ can't be altered
  27.     Text$ = COMMAND$
  28.     ' Sep$ is the legal command separator (change as you desire)
  29.     Sep$ = " "
  30.     ' Num = the number of command/s in the command line tail.
  31.     Num = 0
  32.     ' Bail out on empty command line
  33.       IF Text$ = ""                            _
  34.        THEN GOTO ParseExit
  35.     ' Bail out on non-alpha first character in command line
  36.       IF ASC(Text$) < 65                        _
  37.        OR ASC(Text$) > 90                        _
  38.           THEN GOTO ParseError 
  39.     ' We start filling Cmd$(Num)
  40.     ' Look for from 1 to NumMax commands to put in Cmd$(Num) 
  41.     Num = 1
  42. ParseLoop:
  43.     ' IsSep flags the occurrance & location of the first separator in Text$
  44.         IsSep = INSTR(Text$ , Sep$)
  45.     ' If no separator, there is only this command left
  46.         IF IsSep = False                    _
  47.            THEN Cmd$(Num) = Text$ :                _
  48.             GOTO ParseExit
  49.     ' There is a separator, so get the command
  50.     IF Num =< NumMax                        _
  51.        THEN    Cmd$(Num) = LEFT$(Text$ , IsSep - 1)
  52.     ' If at our limit -- time to go
  53.     IF Num > NumMax                            _
  54.        THEN GOTO ParseExit
  55.     ' Adjust Text$
  56.     Text$ = RIGHT$(Text$ , LEN(Text$) - IsSep)
  57.     ' Adjust the count
  58.     Num = Num + 1
  59.     ' Go filter any leading spaces or TABs in Text$
  60.     WHILE ASC(Text$) = 9                        _
  61.        OR ASC(Text$) = 32
  62.           Text$ = RIGHT$(Text$ , LEN(Text$) - 1)
  63.     WEND
  64.     ' Back for another command
  65.     GOTO ParseLoop
  66. ParseError:
  67.     Text$ = "Non-alpha command . . ."
  68.     GOSUB Center
  69.     BEEP
  70. ParseExit:
  71. RETURN
  72. ' >>>>> Physical EOF PARSE.SUB  25 June 86
  73.